/**
    算法描述：马每走一步，将所在位置（未记录）的二维数组记录数据。直到所有数据记录完毕
    核心问题：1.bfs记录最短步数         2.所有数据记录完毕标签
    解决所需数据结构+算法：bfs算法
**/
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

struct Loc {
    /* data */
    int x, y, step;
}q[160010], st;

/*
    方向变量及数组
*/
int dx[8] = {1,1,-1,-1,2,2,-2,-2};
int dy[8] = {2,-2,2,-2,1,-1,1,-1};

int a[410][410]; // 棋盘
int front = -1, rear = 0; // 手写队列

int n, m, x, y;

void bfs() {
    q[++front] = st;
    while(front >= rear) {
        Loc l = q[rear];
        for(int i=0; i<8; i++)  {
            int x = l.x + dx[i];
            int y = l.y + dy[i];
            if(-1==a[x][y] && x>0 && y>0 && x<=n && y<=m) {
                a[x][y] = l.step + 1;
                q[++front] = {x,y,a[x][y]};
            }
        }
    	rear++;
    }
}

int main() {
    memset(a, 0, sizeof(a));
    cin >> n >> m >> st.x >> st.y;

    // 题目要求，将棋盘初始化成-1
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            a[i][j] = -1;

    // 核心bfs
    st.step = 0;
    a[st.x][st.y] = st.step;
    bfs();

    // 输出
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cout.setf(ios::left);
            cout.width(5);
            cout << a[i][j];
        }
        cout << endl;
    }
    return 0;
}